From: robertl Date: Sun, 11 Apr 2010 22:45:05 +0000 (+0000) Subject: Commit the UTM handlers for unicsv that I implemented in November. X-Git-Tag: archive/raspbian/1.10.0+ds-2+rpi1~1^2~199^2~12 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=dc098672ee734caed49545db1cf8d3467d5fbb84;p=gpsbabel.git Commit the UTM handlers for unicsv that I implemented in November. --- diff --git a/csv_util.c b/csv_util.c index 3d3ce6a76..9a33bfe08 100644 --- a/csv_util.c +++ b/csv_util.c @@ -126,6 +126,12 @@ typedef enum { XT_TRACK_NAME, XT_TRACK_NEW, XT_URL, + XT_UTM, + XT_UTM_ZONE, + XT_UTM_ZONEC, + XT_UTM_ZONEF, + XT_UTM_EASTING, + XT_UTM_NORTHING, XT_URL_LINK_TEXT, XT_YYYYMMDD_TIME } xcsv_token; @@ -149,6 +155,9 @@ static int waypt_out_count; static route_head *csv_track, *csv_route; #endif // CSVFMTS_ENABLED +static double utm_northing, utm_easting, utm_zone = 0; +static char utm_zonec; + /*********************************************************************/ /* csv_stringclean() - remove any unwanted characters from string. */ /* returns copy of string. */ @@ -1038,6 +1047,34 @@ xcsv_parse_val(const char *s, waypoint *wpt, const field_map_t *fmp, parse_coordinates(s, DATUM_OSGB36, grid_bng, &wpt->latitude, &wpt->longitude, MYNAME); break; + case XT_UTM_ZONE: + utm_zone = atoi(s); + break; + case XT_UTM_ZONEC: + utm_zonec = atoi(s); + break; + case XT_UTM_ZONEF: + utm_zone = atoi(s); + utm_zonec = s[strlen(s) - 1]; + break; + case XT_UTM_EASTING: + utm_easting = atof(s); + break; + case XT_UTM_NORTHING: + utm_northing = atof(s); + break; + case XT_UTM: { + char *ss; + int i = 0;; + + utm_zone = strtod(s, &ss); + utm_zonec = ss[i]; + ss++; + utm_easting = strtof(ss, &ss); + while(*ss && !isdigit(*ss)) ss++; + utm_northing = strtof(ss, NULL); + } + break; /* ALTITUDE CONVERSIONS ************************************************/ case XT_ALT_FEET: /* altitude in feet as a decimal value */ @@ -1272,6 +1309,10 @@ xcsv_data_read(void) ogue_t *ogp; route_head *rte = NULL; route_head *trk = NULL; + utm_northing = 0; + utm_easting = 0; + utm_zone = 0; + utm_zonec = 'N'; csv_route = csv_track = NULL; if (xcsv_file.datatype == trkdata) { @@ -1342,11 +1383,21 @@ xcsv_data_read(void) s = csv_lineparse(NULL, xcsv_file.field_delimiter, "", linecount); } + if ((xcsv_file.gps_datum > -1) && (xcsv_file.gps_datum != GPS_DATUM_WGS84)) { double alt; GPS_Math_Known_Datum_To_WGS84_M(wpt_tmp->latitude, wpt_tmp->longitude, 0.0, &wpt_tmp->latitude, &wpt_tmp->longitude, &alt, xcsv_file.gps_datum); } + + if (utm_easting || utm_northing) { + GPS_Math_UTM_EN_To_Known_Datum(&wpt_tmp->latitude, + &wpt_tmp->longitude, + utm_easting, utm_northing, + utm_zone, utm_zonec, + DATUM_WGS84); + } + switch(xcsv_file.datatype) { case 0: case wptdata: @@ -1410,6 +1461,9 @@ xcsv_waypt_pr(const waypoint *wpt) field_map_t *fmp; queue *elem, *tmp; double latitude, longitude; + int32 utmz; + double utme, utmn; + char utmzc; buff[0] = '\0'; @@ -1653,6 +1707,44 @@ xcsv_waypt_pr(const waypoint *wpt) snprintf(buff, sizeof(buff), fmp->printfc, map, (int)(east + 0.5), (int)(north + 0.5)); } break; + case XT_UTM: { + char tbuf[100]; + GPS_Math_WGS84_To_UTM_EN(wpt->latitude, wpt->longitude, + &utme, &utmn, &utmz, &utmzc); + snprintf(tbuf, sizeof(tbuf), "%d%c %6.0f %7.0f", + utmz, utmzc, utme, utmn); + writebuff(buff, fmp->printfc, tbuf); + } + break; + case XT_UTM_ZONE: + GPS_Math_WGS84_To_UTM_EN(wpt->latitude, wpt->longitude, + &utme, &utmn, &utmz, &utmzc); + writebuff(buff, fmp->printfc, utmz); + break; + case XT_UTM_ZONEC: + GPS_Math_WGS84_To_UTM_EN(wpt->latitude, wpt->longitude, + &utme, &utmn, &utmz, &utmzc); + writebuff(buff, fmp->printfc, utmzc); + break; + case XT_UTM_ZONEF: { + GPS_Math_WGS84_To_UTM_EN(wpt->latitude, wpt->longitude, + &utme, &utmn, &utmz, &utmzc); + char tbuf[10]; + tbuf[0] = 0; + snprintf(tbuf, sizeof(tbuf), "%d%c", utmz, utmzc); + writebuff(buff, fmp->printfc, tbuf); + } + break; + case XT_UTM_NORTHING: + GPS_Math_WGS84_To_UTM_EN(wpt->latitude, wpt->longitude, + &utme, &utmn, &utmz, &utmzc); + writebuff(buff, fmp->printfc, utmn); + break; + case XT_UTM_EASTING: + GPS_Math_WGS84_To_UTM_EN(wpt->latitude, wpt->longitude, + &utme, &utmn, &utmz, &utmzc); + writebuff(buff, fmp->printfc, utme); + break; /* ALTITUDE CONVERSIONS**********************************************/ case XT_ALT_FEET: diff --git a/xcsv_tokens.gperf b/xcsv_tokens.gperf index 4cb3f4871..a525f4a0c 100644 --- a/xcsv_tokens.gperf +++ b/xcsv_tokens.gperf @@ -1,4 +1,4 @@ -/* ANSI-C code produced by gperf version 3.0.3 */ +/* ANSI-C code produced by gperf version 3.0.1 */ /* Command-line: gperf -L ANSI-C -D -t xcsv_tokens.in */ /* Computed positions: -k'2,4-5,12,$' */ @@ -32,7 +32,7 @@ #line 1 "xcsv_tokens.in" struct xt_mapping {char *name; int xt_token; }; -#define TOTAL_KEYWORDS 75 +#define TOTAL_KEYWORDS 81 #define MIN_WORD_LENGTH 3 #define MAX_WORD_LENGTH 21 #define MIN_HASH_VALUE 5 @@ -58,9 +58,9 @@ hash (register const char *str, register unsigned int len) 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 0, 186, 0, 0, 0, - 70, 0, 30, 45, 186, 30, 50, 35, 5, 15, - 25, 186, 0, 70, 0, 186, 0, 5, 30, 25, - 186, 186, 186, 186, 186, 20, 186, 186, 186, 186, + 50, 20, 30, 60, 186, 30, 50, 35, 5, 15, + 45, 186, 0, 70, 0, 186, 15, 5, 35, 20, + 80, 186, 186, 186, 186, 20, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, @@ -107,9 +107,6 @@ hash (register const char *str, register unsigned int len) #ifdef __GNUC__ __inline -#ifdef __GNUC_STDC_INLINE__ -__attribute__ ((__gnu_inline__)) -#endif #endif struct xt_mapping * in_word_set (register const char *str, register unsigned int len) @@ -138,8 +135,6 @@ in_word_set (register const char *str, register unsigned int len) {"GEOCACHE_ISARCHIVED", XT_GEOCACHE_ISARCHIVED}, #line 19 "xcsv_tokens.in" {"GEOCACHE_ISAVAILABLE", XT_GEOCACHE_ISAVAILABLE}, -#line 34 "xcsv_tokens.in" - {"IGNORE", XT_IGNORE}, #line 15 "xcsv_tokens.in" {"GEOCACHE_CONTAINER", XT_GEOCACHE_CONTAINER}, #line 68 "xcsv_tokens.in" @@ -150,8 +145,6 @@ in_word_set (register const char *str, register unsigned int len) {"LAT_DIR", XT_LAT_DIR}, #line 58 "xcsv_tokens.in" {"NET_TIME", XT_NET_TIME}, -#line 56 "xcsv_tokens.in" - {"MAP_EN_BNG", XT_MAP_EN_BNG}, #line 45 "xcsv_tokens.in" {"LAT_DDMMDIR", XT_LAT_DDMMDIR}, #line 46 "xcsv_tokens.in" @@ -160,12 +153,14 @@ in_word_set (register const char *str, register unsigned int len) {"LAT_DECIMALDIR", XT_LAT_DECIMALDIR}, #line 33 "xcsv_tokens.in" {"ICON_DESCR", XT_ICON_DESCR}, -#line 23 "xcsv_tokens.in" - {"GEOCACHE_TYPE", XT_GEOCACHE_TYPE}, +#line 77 "xcsv_tokens.in" + {"UTM", XT_UTM}, #line 69 "xcsv_tokens.in" {"SHORTNAME", XT_SHORTNAME}, #line 73 "xcsv_tokens.in" {"TRACK_NAME", XT_TRACK_NAME}, +#line 34 "xcsv_tokens.in" + {"IGNORE", XT_IGNORE}, #line 51 "xcsv_tokens.in" {"LON_DIR", XT_LON_DIR}, #line 66 "xcsv_tokens.in" @@ -174,92 +169,106 @@ in_word_set (register const char *str, register unsigned int len) {"TRACK_NEW", XT_TRACK_NEW}, #line 54 "xcsv_tokens.in" {"LON_DDMMDIR", XT_LON_DDMMDIR}, +#line 9 "xcsv_tokens.in" + {"COUNTRY", XT_COUNTRY}, #line 55 "xcsv_tokens.in" {"LON_NMEA", XT_LON_NMEA}, #line 48 "xcsv_tokens.in" {"LON_DECIMALDIR", XT_LON_DECIMALDIR}, -#line 9 "xcsv_tokens.in" - {"COUNTRY", XT_COUNTRY}, +#line 56 "xcsv_tokens.in" + {"MAP_EN_BNG", XT_MAP_EN_BNG}, +#line 81 "xcsv_tokens.in" + {"UTM_EASTING", XT_UTM_EASTING}, #line 76 "xcsv_tokens.in" {"URL", XT_URL}, -#line 72 "xcsv_tokens.in" - {"TIMET_TIME", XT_TIMET_TIME}, #line 14 "xcsv_tokens.in" {"FORMAT", XT_FORMAT}, -#line 13 "xcsv_tokens.in" - {"FILENAME", XT_FILENAME}, +#line 23 "xcsv_tokens.in" + {"GEOCACHE_TYPE", XT_GEOCACHE_TYPE}, #line 65 "xcsv_tokens.in" {"PATH_SPEED", XT_PATH_SPEED}, #line 59 "xcsv_tokens.in" {"PATH_COURSE", XT_PATH_COURSE}, #line 24 "xcsv_tokens.in" {"GMT_TIME", XT_GMT_TIME}, -#line 31 "xcsv_tokens.in" - {"HMSG_TIME", XT_HMSG_TIME}, #line 42 "xcsv_tokens.in" {"LAT_HUMAN_READABLE", XT_LAT_HUMAN_READABLE}, -#line 35 "xcsv_tokens.in" - {"INDEX", XT_INDEX}, +#line 72 "xcsv_tokens.in" + {"TIMET_TIME", XT_TIMET_TIME}, +#line 13 "xcsv_tokens.in" + {"FILENAME", XT_FILENAME}, #line 47 "xcsv_tokens.in" {"LOCAL_TIME", XT_LOCAL_TIME}, -#line 43 "xcsv_tokens.in" - {"LAT_INT32DEG", XT_LAT_INT32DEG}, -#line 29 "xcsv_tokens.in" - {"GPS_VDOP", XT_GPS_VDOP}, +#line 82 "xcsv_tokens.in" + {"UTM_NORTHING", XT_UTM_NORTHING}, +#line 35 "xcsv_tokens.in" + {"INDEX", XT_INDEX}, #line 39 "xcsv_tokens.in" {"LAT_DECIMAL", XT_LAT_DECIMAL}, #line 52 "xcsv_tokens.in" {"LON_HUMAN_READABLE", XT_LON_HUMAN_READABLE}, +#line 31 "xcsv_tokens.in" + {"HMSG_TIME", XT_HMSG_TIME}, #line 20 "xcsv_tokens.in" {"GEOCACHE_LAST_FOUND", XT_GEOCACHE_LAST_FOUND}, -#line 11 "xcsv_tokens.in" - {"EXCEL_TIME", XT_EXCEL_TIME}, #line 44 "xcsv_tokens.in" {"LATLON_HUMAN_READABLE", XT_LATLON_HUMAN_READABLE}, -#line 53 "xcsv_tokens.in" - {"LON_INT32DEG", XT_LON_INT32DEG}, #line 8 "xcsv_tokens.in" {"CONSTANT", XT_CONSTANT}, +#line 11 "xcsv_tokens.in" + {"EXCEL_TIME", XT_EXCEL_TIME}, #line 49 "xcsv_tokens.in" {"LON_DECIMAL", XT_LON_DECIMAL}, #line 37 "xcsv_tokens.in" {"ISO_TIME", XT_ISO_TIME}, -#line 7 "xcsv_tokens.in" - {"CITY", XT_CITY}, #line 60 "xcsv_tokens.in" {"PATH_DISTANCE_KM", XT_PATH_DISTANCE_KM}, -#line 27 "xcsv_tokens.in" - {"GPS_PDOP", XT_GPS_PDOP}, -#line 26 "xcsv_tokens.in" - {"GPS_HDOP", XT_GPS_HDOP}, -#line 75 "xcsv_tokens.in" - {"URL_LINK_TEXT", XT_URL_LINK_TEXT}, +#line 7 "xcsv_tokens.in" + {"CITY", XT_CITY}, +#line 78 "xcsv_tokens.in" + {"UTM_ZONE", XT_UTM_ZONE}, +#line 79 "xcsv_tokens.in" + {"UTM_ZONEC", XT_UTM_ZONEC}, +#line 16 "xcsv_tokens.in" + {"GEOCACHE_DIFF", XT_GEOCACHE_DIFF}, #line 32 "xcsv_tokens.in" {"HMSL_TIME", XT_HMSL_TIME}, +#line 75 "xcsv_tokens.in" + {"URL_LINK_TEXT", XT_URL_LINK_TEXT}, #line 40 "xcsv_tokens.in" {"LAT_DIRDECIMAL", XT_LAT_DIRDECIMAL}, -#line 28 "xcsv_tokens.in" - {"GPS_SAT", XT_GPS_SAT}, +#line 83 "xcsv_tokens.in" + {"YYYYMMDD_TIME", XT_YYYYMMDD_TIME}, #line 63 "xcsv_tokens.in" {"PATH_SPEED_KPH", XT_PATH_SPEED_KPH}, -#line 12 "xcsv_tokens.in" - {"FACILITY", XT_FACILITY}, +#line 3 "xcsv_tokens.in" + {"ALT_FEET", XT_ALT_FEET}, #line 64 "xcsv_tokens.in" {"PATH_SPEED_MPH", XT_PATH_SPEED_MPH}, -#line 77 "xcsv_tokens.in" - {"YYYYMMDD_TIME", XT_YYYYMMDD_TIME}, +#line 43 "xcsv_tokens.in" + {"LAT_INT32DEG", XT_LAT_INT32DEG}, +#line 29 "xcsv_tokens.in" + {"GPS_VDOP", XT_GPS_VDOP}, #line 50 "xcsv_tokens.in" {"LON_DIRDECIMAL", XT_LON_DIRDECIMAL}, +#line 12 "xcsv_tokens.in" + {"FACILITY", XT_FACILITY}, #line 61 "xcsv_tokens.in" {"PATH_DISTANCE_MILES", XT_PATH_DISTANCE_MILES}, -#line 3 "xcsv_tokens.in" - {"ALT_FEET", XT_ALT_FEET}, +#line 28 "xcsv_tokens.in" + {"GPS_SAT", XT_GPS_SAT}, +#line 53 "xcsv_tokens.in" + {"LON_INT32DEG", XT_LON_INT32DEG}, +#line 26 "xcsv_tokens.in" + {"GPS_HDOP", XT_GPS_HDOP}, #line 25 "xcsv_tokens.in" {"GPS_FIX", XT_GPS_FIX}, -#line 16 "xcsv_tokens.in" - {"GEOCACHE_DIFF", XT_GEOCACHE_DIFF}, +#line 80 "xcsv_tokens.in" + {"UTM_ZONEF", XT_UTM_ZONEF}, #line 57 "xcsv_tokens.in" {"NOTES", XT_NOTES}, +#line 27 "xcsv_tokens.in" + {"GPS_PDOP", XT_GPS_PDOP}, #line 62 "xcsv_tokens.in" {"PATH_SPEED_KNOTS", XT_PATH_SPEED_KNOTS}, #line 36 "xcsv_tokens.in" @@ -271,19 +280,19 @@ in_word_set (register const char *str, register unsigned int len) static signed char lookup[] = { -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, 1, 2, 3, 4, - -1, 5, 6, 7, 8, 9, 10, 11, -1, 12, -1, 13, 14, 15, - 16, -1, 17, 18, -1, 19, 20, 21, -1, -1, 22, 23, 24, -1, - 25, 26, 27, -1, 28, -1, 29, 30, -1, -1, 31, 32, -1, 33, - 34, -1, 35, -1, 36, 37, -1, 38, 39, -1, -1, -1, 40, -1, - 41, -1, -1, -1, -1, 42, -1, 43, 44, -1, -1, 45, -1, 46, - -1, -1, -1, -1, -1, 47, 48, 49, 50, 51, -1, -1, 52, -1, - 53, 54, -1, 55, -1, 56, -1, -1, -1, -1, 57, -1, -1, -1, - -1, 58, 59, -1, -1, -1, -1, 60, -1, -1, 61, -1, 62, -1, - -1, -1, 63, 64, -1, -1, -1, 65, 66, -1, -1, -1, -1, 67, - -1, -1, -1, -1, -1, -1, -1, -1, 68, -1, -1, -1, 69, 70, - -1, -1, -1, -1, -1, -1, 71, -1, -1, -1, -1, -1, 72, -1, - -1, -1, -1, 73, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 74 + -1, 5, 6, 7, 8, 9, 10, -1, -1, 11, -1, 12, 13, 14, + 15, -1, -1, 16, -1, 17, 18, 19, -1, -1, 20, 21, 22, 23, + 24, 25, 26, -1, 27, 28, 29, 30, 31, 32, -1, 33, -1, -1, + 34, -1, 35, -1, 36, 37, -1, 38, -1, -1, -1, -1, 39, -1, + 40, -1, -1, 41, -1, 42, -1, 43, -1, -1, 44, 45, -1, 46, + 47, -1, -1, -1, -1, 48, -1, 49, -1, 50, -1, 51, 52, -1, + 53, -1, -1, 54, -1, -1, 55, -1, -1, -1, 56, 57, -1, -1, + -1, 58, 59, -1, -1, -1, 60, 61, -1, -1, -1, 62, 63, -1, + -1, -1, 64, 65, -1, -1, 66, 67, 68, -1, -1, -1, 69, 70, + -1, -1, 71, -1, -1, -1, -1, 72, 73, -1, -1, -1, -1, -1, + -1, -1, -1, 74, -1, 75, 76, -1, -1, 77, -1, -1, 78, -1, + -1, -1, -1, 79, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 80 }; if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) diff --git a/xcsv_tokens.in b/xcsv_tokens.in index 3d7f1013c..35e1a0ca2 100644 --- a/xcsv_tokens.in +++ b/xcsv_tokens.in @@ -74,4 +74,10 @@ TRACK_NAME, XT_TRACK_NAME TRACK_NEW, XT_TRACK_NEW URL_LINK_TEXT, XT_URL_LINK_TEXT URL, XT_URL +UTM, XT_UTM +UTM_ZONE, XT_UTM_ZONE +UTM_ZONEC, XT_UTM_ZONEC +UTM_ZONEF, XT_UTM_ZONEF +UTM_EASTING, XT_UTM_EASTING +UTM_NORTHING, XT_UTM_NORTHING YYYYMMDD_TIME, XT_YYYYMMDD_TIME